package com.ruoyi.web.util;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class AESUtils {

    private static final String AESSecretKey = "aKd20dbGdFvmuwrt";

    /**
     * 解密
     */
//    public static String decrypt(String encryptedBase64, String keyStr) throws Exception {
//        // 1. Base64 解码
//        byte[] encryptedBytes = Base64.getDecoder().decode(encryptedBase64);
//
//        // 2. 初始化密钥
//        SecretKeySpec keySpec = new SecretKeySpec(keyStr.getBytes(StandardCharsets.UTF_8), "AES");
//
//        // 3. 初始化 Cipher
//        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
//        cipher.init(Cipher.DECRYPT_MODE, keySpec);
//
//        // 4. 解密并返回结果
//        byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
//        return new String(decryptedBytes, StandardCharsets.UTF_8);
//    }

    public static String decryptHex(String encryptedHex, String keyStr) throws Exception {
        // 1. 将十六进制字符串转为字节数组（前端 CryptoJS.enc.Hex.parse 的逆向操作）
        byte[] encryptedBytes = hexToBytes(encryptedHex);

        // 2. 初始化 AES 密钥（UTF-8 编码，长度必须为 128/192/256 位）
        SecretKeySpec keySpec = new SecretKeySpec(
                keyStr.getBytes(StandardCharsets.UTF_8),
                "AES"
        );

        // 3. 初始化 Cipher（使用 ECB 模式和 PKCS5Padding，兼容前端的 PKCS7）
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, keySpec);

        // 4. 执行解密
        byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
        return new String(decryptedBytes, StandardCharsets.UTF_8);
    }

    public static String decryptBase64(String encryptedHex, String keyStr) throws Exception {
        // 1. 将十六进制字符串转为字节数组（前端 CryptoJS.enc.Hex.parse 的逆向操作）
        byte[] encryptedBytes = Base64.getDecoder().decode(encryptedHex);;

        // 2. 初始化 AES 密钥（UTF-8 编码，长度必须为 128/192/256 位）
        SecretKeySpec keySpec = new SecretKeySpec(
                keyStr.getBytes(StandardCharsets.UTF_8),
                "AES"
        );

        // 3. 初始化 Cipher（使用 ECB 模式和 PKCS5Padding，兼容前端的 PKCS7）
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, keySpec);

        // 4. 执行解密
        byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
        return new String(decryptedBytes, StandardCharsets.UTF_8);
    }

    // 十六进制字符串转字节数组
    private static byte[] hexToBytes(String hex) {
        int len = hex.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)
                    + Character.digit(hex.charAt(i + 1), 16));
        }
        return data;
    }

    public static String getAESSecretKey() {
        return AESSecretKey;
    }
}
